On-Demand Rides and Deliveries (ODRD)

Descripcion

Explicación de los componentes e implementación del entorno ODRD (On-Demand Rides and Deliveries) de Google

Documentación ODRD

Código Ejemplo

Componentes

Fleet Engine

Driver SDK

Navigation SDK

Consumer SDK

Location Selection API

Implementacion ODRD

Provider (Backend)

Para lanzar el backend primero tenemos que configurar el siguiente archivo (dentro de la carpeta provider):

src\main\resources\config.properties

Modificamos los siguientes campos:

provider-id=YOUR_PROVIDER_ID
server-token-account=SERVER_TOKEN_ACCOUNT@PROJECT_ID.iam.gserviceaccount.com
consumer-token-account=CONSUMER_TOKEN_ACCOUNT@PROJECT_ID.iam.gserviceaccount.com
driver-token-account=DRIVER_TOKEN_ACCOUNT@PROJECT_ID.iam.gserviceaccount.com 

Como provider-id indicamos el id de nuestro proyecto en google cloud

NOTA: Las cuentas de servicio no son las mismas que en LMFS.

En server-token-account tenemos que indicar una cuenta de servicio que tenga el rol Superusuario del servicio de Fleet Engine.

En consumer-token-account tenemos que indicar una cuenta de servicio que tenga el rol Usuario de SDK para el controlador de Fleet Engine.

En driver-token-account tenemos que indicar una cuenta de servicio que tenga el rol Usuario de SDK para el controlador de Fleet Engine.

Si alguna de las cuentas no tiene los roles indicados obtendremos un error al intentar añadir un nuevo viaje como el siguiente:

PERMISSION_DENIED: User does not have permissions to complete this request

Android App

Tenemos dos aplicaciones: Driver y Consumer

Para lanzar la aplicación android primero tenemos que realizar la siguiente configuración:

Dentro de la carpeta Android creamos un archivo local.properties con el siguietne contenido:

MAPS_API_KEY=<MAPS_API_KEY>
PROVIDER_ID=<PROVIDER_ID>
PROVIDER_URL=http://10.0.2.2:8080 

Cambiamos <MAPS_API_KEY> y <PROVIDER_ID> por los datos corresopndientes a nuestro proyecto, el PROVIDER_URL podemos dejar ese, porque es la dirección local de nuestro sistema anfitrión dentro del emulador de android.

Una vez añadido este archivo podemos abrir la carpeta android con el android studio y desde ahí ejecutar los dos poryecto, tanto la Driver App como la Consumer App

Antes de ejecutar las aplicaciones de android tenemos que asegurarnos de tener el provider ejecutandose, si no no podremos crear nuevas tareas.

Si ya tenemos todo ejecutandose creamos un nuevo viaje usando la aplicación de cliente, y aceptamos el viaje usando la aplicación de conductor

Troubleshooting Android

Al intentar crear un viaje desde la aplicación cliente podemos encontrarnos con el siguiente error:

com.google.api.gax.rpc.PermissionDeniedException: io.grpc.StatusRuntimeException: PERMISSION_DENIED: User does not have permissions to complete this request

Este error se debe a que la cuenta de servicio server-token-account está mal configurada en el provider en el archivo src\main\resources\config.properties, puede ser que la cuenta no tenga los permisos necesarios, los permisos que tendría que tener esta cuenta son los de Superusuario del servicio de Fleet Engine.

Hay que tener cuidado porque hay dos roles que se parecen mucho: Superusuario del servicio de Fleet Engine y Superusuario de entrega de Fleet Engine. el que necesitamos en ODRD es el primero Superusuario del servicio de Fleet Engine

Web App (Angular)

Para lanzar la aplicación web tenemos que realizar primero la siguiente configuración:

En el archivo src\app\journey-sharing-google-map\journey-sharing-google-map.component.ts tenemos que cambiar 3 variables: PROVIDER_URL, apiKey y projectId. En el caso de PROVIDER_URL podemos indicar la dirección local http://127.0.0.1:8080

Una vez hechos estos cambios ya podemos ejecutar la applicación angular:

npm install npm serve

Solucionar problema CORS

Por defecto las solicitudes que haga la aplicación web al backend (provider) serán bloqueadas por la politica CORS del navegador.

Para solucionar este problema tenemos que modificar el backend (provider) de la siguiente manera:

En el archivo src\main\java\com\example\provider\TokenServlet.java añadimos la siguiente linea de código:

response.addHeader("Access-Control-Allow-Origin", "*");

El asterisco indica que cualquier origen puede hacer solicitudes al servidor, si queremos podemos indicar un dominio concreto.

Una vez hecho este cambio en el backend podemos realizar solicitudes sobre viajes creados desde la aplicación web.

Visualizar viajes en la Web App

Desde la aplicación android de cliente creamos un nuevo viaje, desde la aplicación de conductor aceptamos el viaje, a continuación en la consola donde estamos ejecutando el provider cogemos el id del viaje y lo pegamos en la aplicación Web, y podremos ver el estado del viaje y la posición actual del conductor.

Troubleshooting

Al lanzar el proyecto obtenemos el siguiente error:

Could not resolve all artifacts for configuration ':classpath'.

Este error se da porque para que el proyecto funcione necesitamos Java 8 si tenemos otra versión mas nueva se dará ese error, para solucionarlo solo tenemos que instalar Java 8 y actualizar la variable JAVA_HOME.

Tags

java | ODRD